﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;

using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Threading;
using System.Collections;

namespace INSAForManagers
{    
    public partial class FormAddition : Form
    {
        private FormACard formParent;
        public string pcode;        
        public DataTable tbl;

        //선택된 데이터그리드의 행 인덱스
        public int selectedIndex = -1;

        //계산 상태 멤버
        public bool calcRequired = false;

        //반영 상태 변수
        public bool applyRequired = false;
                
        public FormAddition(FormACard parent, string pcode)
        {
            InitializeComponent();

            Control.CheckForIllegalCrossThreadCalls = false;

            this.formParent = parent;
            this.pcode = pcode;
            tbl = new DataTable();
        }

        private void FormAddition_Load(object sender, EventArgs e)
        {
            try
            {
                if (pcode == null || pcode.Equals("개인번호") || pcode.Length == 0)
                {
                    throw new Exception("대상자를 먼저 선택하세요!   ");
                }

                addColumns();

                initGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "확인", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
        }

        private void addColumns()
        {
            DataColumn col = null;

            //항목코드  0
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "코드";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //항목명 1
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "구분";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //근무기관  2
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "근무기관";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //근무기간(시작) 3
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "근무기간(시작)";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //근무기간(끝)    4
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "근무기간(끝)";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //평정대상기간(시작)   5
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "평정대상기간(시작)";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //평정대상기간(끝)  6
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "평정대상기간(끝)";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //평정월수  7
            col = new DataColumn();
            col.DataType = Type.GetType("System.Int32");
            col.ColumnName = "평정월수";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //평정일수  8
            col = new DataColumn();
            col.DataType = Type.GetType("System.Int32");
            col.ColumnName = "평정일수";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //월평정점  9
            col = new DataColumn();
            col.DataType = Type.GetType("System.Double");
            col.ColumnName = "월평정점";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //일평정점  10
            col = new DataColumn();
            col.DataType = Type.GetType("System.Double");
            col.ColumnName = "일평정점";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //평정점 11
            col = new DataColumn();
            col.DataType = Type.GetType("System.Double");
            col.ColumnName = "평정점";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //그룹코드  12
            col = new DataColumn();
            col.DataType = Type.GetType("System.String");
            col.ColumnName = "그룹코드";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //순서    13
            col = new DataColumn();
            col.DataType = Type.GetType("System.Int32");
            col.ColumnName = "INX";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            //순서    14
            col = new DataColumn();
            col.DataType = Type.GetType("System.Int32");
            col.ColumnName = "ORDER";
            col.AllowDBNull = true;
            col.ReadOnly = false;
            tbl.Columns.Add(col);

            dgvAdditionList.DataSource = tbl;

            dgvAdditionList.Columns[0].Visible = false;
            dgvAdditionList.Columns[1].Width = 100;
            dgvAdditionList.Columns[2].Width = 100;
            dgvAdditionList.Columns[3].Width = 70;
            dgvAdditionList.Columns[4].Width = 70;
            dgvAdditionList.Columns[5].Width = 70;
            dgvAdditionList.Columns[6].Width = 70;
            dgvAdditionList.Columns[7].Width = 70;
            dgvAdditionList.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvAdditionList.Columns[8].Width = 70;
            dgvAdditionList.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvAdditionList.Columns[9].Width = 70;
            dgvAdditionList.Columns[9].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvAdditionList.Columns[9].DefaultCellStyle.Format = "#0.00000";
            dgvAdditionList.Columns[10].Width = 70;
            dgvAdditionList.Columns[10].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvAdditionList.Columns[10].DefaultCellStyle.Format = "#0.00000";
            dgvAdditionList.Columns[11].Width = 70;
            dgvAdditionList.Columns[11].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvAdditionList.Columns[11].DefaultCellStyle.Format = "#0.00000";
            dgvAdditionList.Columns[12].Visible = false;
            dgvAdditionList.Columns[13].Visible = false;
            dgvAdditionList.Columns[14].Visible = false;
            
        }

        public void initGrid()
        {

            tbl.Rows.Clear();

            ArrayList list = DBUtil.getListFromAdditionTable(this.pcode);
            for (int i = 0; i < list.Count; i++)
            {
                Hashtable data = (Hashtable)list[i];

                DataRow row = tbl.NewRow();
                row[0] = (string)data["ADD_ITEM"];//항목코드
                //row[1] = DBUtil.getAddItemName((string)data["ADD_ITEM"]);     //구분(항목명)
                row[1] = (string)data["ADD_ITEM_CONTENT"];     //구분(항목명)
                row[2] = (string)data["ADD_ORGAN"];//근무기관

                //근무시작일자 있으면
                if (data["ADD_START"] != null)
                {
                    row[3] = (string)data["ADD_START"];    //근무시작일자
                }
                //근무시작일자 없으면
                else
                {
                    row[3] = null;
                }

                //근무종료일자 있으면
                if (data["ADD_END"] != null)
                {
                    row[4] = (string)data["ADD_END"];    //근무종료일자
                }
                //근무종료일자 없으면
                else
                {
                    row[4] = null;
                }
                //대상시작일자 있으면
                if (data["TARGET_START"] != null)
                {
                    row[5] = (string)data["TARGET_START"];    //대상시작일자
                }
                //대상시작일자 없으면
                else
                {
                    row[5] = "";
                }
                //대상종료일자 있으면
                if (data["TARGET_END"] != null)
                {
                    row[6] = (string)data["TARGET_END"];    //대상종료일자
                }
                //대상종료일자 없으면
                else
                {
                    row[6] = "";
                }

                row[7] = Int32.Parse(data["ADD_MONTH"].ToString());    //평정월수
                row[8] = Int32.Parse(data["ADD_DAY"].ToString());   //평정일수
                row[9] = Double.Parse(data["MONTHLY_POINT"].ToString());  //월평정점
                row[10] = Double.Parse(data["DAILY_POINT"].ToString());  //일평정점
                row[11] = Double.Parse(data["TOTAL_POINT"].ToString()); //평정점
                row[12] = (string)data["ADD_GROUP"];//그룹코드
                row[13] = Int32.Parse(data["INX"].ToString());//키
                row[14] = Int32.Parse(data["ADD_ORDER"].ToString());//순서

                tbl.Rows.Add(row);
            }

            dgvAdditionList.DataSource = tbl;

        }

       
        ///더 이상 사용 안됨
        //private void readXlsList()
        //{
        //    try
        //    {
        //        clearDGV();

        //        Util.openXls(fileName);
        //        Util.changeSheet(7);

        //        Excel.Range range;

        //        range = Util.OSheet.get_Range("A5", "H40");

        //        object[,] val = (object[,])range.get_Value(Missing.Value);
        //        double[] currEvalue = new double[15];
        //        double[] maxEvalue = new double[] { 1.25, 1.25, 1.25, 2.50, 1.25, 1.00, 1.75, 1.25, 2.0, 1.25, 1.25, 0.75, 0.75, 0.75, 0.75 };
        //        for (int i = 1; i <= val.GetUpperBound(0); i++)
        //        {
        //            if (val[i, 1] == null || val[i, 2] == null) 
        //            {
        //                Util.closeXls();
        //                return;
        //            }


        //            DataRow row = tbl.NewRow();

        //            row[0] = val[i, 1].ToString().Trim();

        //            if (val[i, 2] == null)
        //            {
        //                MessageBox.Show((i + 4) + "행에 일부 값이 누락되어 있습니다.");
        //                return;
        //            }

        //            row[1] = val[i, 2].ToString().Trim();

        //            if (val[i, 3] != null)
        //            {
        //                row[2] = val[i, 3].ToString().Trim().Substring(0, 10);
        //            }
        //            else
        //            {
        //                row[2] = "";
        //            }

        //            if (val[i, 4] != null)
        //            {
        //                row[3] = val[i, 4].ToString().Trim().Substring(0, 10);
        //            }
        //            else
        //            {
        //                row[3] = "";
        //            }

        //            if (val[i, 5] != null)
        //            {
        //                row[4] = val[i, 5].ToString().Trim().Substring(0, 10);
        //            }
        //            else
        //            {
        //                row[4] = "";
        //            }

        //            if (val[i, 6] != null)
        //            {
        //                row[5] = val[i, 6].ToString().Trim().Substring(0, 10);
        //            }
        //            else
        //            {
        //                row[5] = "";
        //            }

        //            //row[6]
        //            if (!row[0].ToString().Equals("직무연수실적") && !row[0].ToString().Equals("국가기술자격증") && !row[0].ToString().Equals("정보소양인증"))
        //            {
        //                if (val[i, 5] == null || val[i, 6] == null)
        //                {
        //                    MessageBox.Show("[" + row[0].ToString() + "]은(는) 평정대상기간을 입력해야 합니다.");
        //                    Util.closeXls();
        //                    return;
        //                }
        //                row[6] = Util.getMonthCount(DateTime.Parse(row[4].ToString()), DateTime.Parse(row[5].ToString()));                        
        //            }

        //            else if(row[0].ToString().Equals("직무연수실적"))
        //            {
        //                if (val[i, 7] == null)
        //                {
        //                    MessageBox.Show("직무연수실적의 경우 평정월수에 연수시간을 입력해야합니다.   ", "확인");
        //                    Util.closeXls();
        //                    return;
        //                }                        
        //                row[5] = val[i, 7].ToString();
        //                int time = (int)(Int32.Parse(val[i, 7].ToString()) / 15);
        //                row[6] = time > 4 ? 4: time;
        //            }
        //            else if (row[0].ToString().Equals("국가기술자격증"))
        //            {
        //                row[5] = val[i, 7].ToString();
        //            }

        //            //row[7]
        //            if (val[i, 8] != null)
        //            {
        //                row[7] = Double.Parse(val[i, 8].ToString().Trim()).ToString("#0.0000");//월평정점
        //            }
        //            else
        //            {
        //                MessageBox.Show("[가산잠평정]월평정점이 누락되어 있습니다. 엑셀 파일을 확인 바랍니다.   ", "확인");
        //                return;
        //            }

        //            //row[8]
        //            if (!row[0].ToString().Equals("국가기술자격증") && !row[0].ToString().Equals("정보소양인증"))
        //            {
        //                double tmpEvalue = (double)(Int32.Parse(row[6].ToString()) * Double.Parse(row[7].ToString()));
        //                //단일 항목으로 만점을 넘으면 최대값 제한
        //                switch (row[0].ToString())
        //                {
        //                    case "연구시범(교육부)":

        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[0])
        //                        {
        //                            tmpEvalue = maxEvalue[0];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[0] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[0] > maxEvalue[0])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[0] - maxEvalue[0])) > 0 ? (tmpEvalue - (currEvalue[0] - maxEvalue[0])) : 0.0;
        //                        }
        //                        break;
        //                    case "연구시범(시)":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[1])
        //                        {
        //                            tmpEvalue = maxEvalue[1];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[1] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[1] > maxEvalue[1])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[1] - maxEvalue[1])) > 0 ? (tmpEvalue - (currEvalue[1] - maxEvalue[1])) : 0.0;
        //                        }
        //                        break;
        //                    case "교생지도":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[2])
        //                        {
        //                            tmpEvalue = maxEvalue[2];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[2] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[2] > maxEvalue[2])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[2] - maxEvalue[2])) > 0 ? (tmpEvalue - (currEvalue[2] - maxEvalue[2])) : 0.0;
        //                        }
        //                        break;
        //                    case "농어촌근무":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[3])
        //                        {
        //                            tmpEvalue = maxEvalue[3];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[3] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[3] > maxEvalue[3])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[3] - maxEvalue[3])) > 0 ? (tmpEvalue - (currEvalue[3] - maxEvalue[3])) : 0.0;
        //                        }
        //                        break;
        //                    case "재외근무":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[4])
        //                        {
        //                            tmpEvalue = maxEvalue[4];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[4] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[4] > maxEvalue[4])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[4] - maxEvalue[4])) > 0 ? (tmpEvalue - (currEvalue[4] - maxEvalue[4])) : 0.0;
        //                        }
        //                        break;
        //                    case "직무연수실적":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[5])
        //                        {
        //                            tmpEvalue = maxEvalue[5];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[5] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[5] > maxEvalue[5])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[5] - maxEvalue[5])) > 0 ? (tmpEvalue - (currEvalue[5] - maxEvalue[5])) : 0.0;
        //                        }
        //                        break;
        //                    case "보직교사":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[6])
        //                        {
        //                            tmpEvalue = maxEvalue[6];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[6] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[6] > maxEvalue[6])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[6] - maxEvalue[6])) > 0 ? (tmpEvalue - (currEvalue[6] - maxEvalue[6])) : 0.0;
        //                        }
        //                        break;
        //                    case "장학사(교육연구사)":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[7])
        //                        {
        //                            tmpEvalue = maxEvalue[7];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[7] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[7] > maxEvalue[7])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[7] - maxEvalue[7])) > 0 ? (tmpEvalue - (currEvalue[7] - maxEvalue[7])) : 0.0;
        //                        }
        //                        break;
        //                    case "도서벽지":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[8])
        //                        {
        //                            tmpEvalue = maxEvalue[8];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[8] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[8] > maxEvalue[8])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[8] - maxEvalue[8])) > 0 ? (tmpEvalue - (currEvalue[8] - maxEvalue[8])) : 0.0;
        //                        }
        //                        break;
        //                    case "한센병":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[9])
        //                        {
        //                            tmpEvalue = maxEvalue[9];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[9] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[9] > maxEvalue[9])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[9] - maxEvalue[9])) > 0 ? (tmpEvalue - (currEvalue[9] - maxEvalue[9])) : 0.0;
        //                        }
        //                        break;
        //                    case "특수학교(학급)":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[10])
        //                        {
        //                            tmpEvalue = maxEvalue[10];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[10] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[10] > maxEvalue[10])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[10] - maxEvalue[10])) > 0 ? (tmpEvalue - (currEvalue[10] - maxEvalue[10])) : 0.0;
        //                        }
        //                        break;
        //                    case "국가기술자격증":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[11])
        //                        {
        //                            tmpEvalue = maxEvalue[11];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[11] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[11] > maxEvalue[11])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[11] - maxEvalue[11])) > 0 ? (tmpEvalue - (currEvalue[11] - maxEvalue[11])) : 0.0;
        //                        }
        //                        break;
        //                    case "정보소양인증":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[12])
        //                        {
        //                            tmpEvalue = maxEvalue[12];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[12] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[12] > maxEvalue[12])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[12] - maxEvalue[12])) > 0 ? (tmpEvalue - (currEvalue[12] - maxEvalue[12])) : 0.0;
        //                        }
        //                        break;
        //                    case "파견(순회)교사":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[13])
        //                        {
        //                            tmpEvalue = maxEvalue[13];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[13] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[13] > maxEvalue[13])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[13] - maxEvalue[13])) > 0 ? (tmpEvalue - (currEvalue[13] - maxEvalue[13])) : 0.0;
        //                        }
        //                        break;
        //                    case "청소년단체활동":
        //                        //평정점 자체가 만점 보다 크면 만점 할당
        //                        if (tmpEvalue > maxEvalue[14])
        //                        {
        //                            tmpEvalue = maxEvalue[14];
        //                        }
        //                        //해당 항목 평정점에 합산
        //                        currEvalue[14] += tmpEvalue;
        //                        //해당 항목 평정점의 합이 만점보다 크면
        //                        if (currEvalue[14] > maxEvalue[14])
        //                        {
        //                            //합산에서 만점을 뺀 값만 할당
        //                            tmpEvalue = (tmpEvalue - (currEvalue[14] - maxEvalue[14])) > 0 ? (tmpEvalue - (currEvalue[14] - maxEvalue[14])) : 0.0;
        //                        }
        //                        break;
        //                }
        //                row[8] = tmpEvalue.ToString("#0.0000");
        //            }
        //            else
        //            {
        //                double tmpEvalue = Double.Parse(row[7].ToString());                        
        //                row[8] = tmpEvalue;
        //            }                    

                    

        //            tbl.Rows.Add(row);
        //        }

                

        //        dgvAdditionList.DataSource = tbl;

        //        Util.closeXls();

        //        lnkSave.Enabled = false;

        //    }
        //    catch (Exception ex)
        //    {
        //        MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "확인");
        //        Util.closeXls();
        //    }
        //}

        private void clearDGV()
        {
            tbl.Rows.Clear();
            dgvAdditionList.DataSource = tbl;
        }

        private void lnkCalcEvalue_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            int cntRow = tbl.Rows.Count;
            double total_point = 0.0;
            double btotal = 0.0;
            double atotal = 0.0;

            for (int i = 0; i < cntRow; i++)
            {
                string code = tbl.Rows[i][12].ToString();
                if (code.IndexOf("A") == 0) btotal += (double)tbl.Rows[i][11];
                if (code.IndexOf("B") == 0) atotal += (double)tbl.Rows[i][11];
            }

            if (atotal > 10.0) atotal = 10.0;

            total_point = btotal + atotal;

            lblTotalPoint.Text = total_point.ToString("#0.00000");
        }

        private void lnkSave_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                //트랜잭션 시작
                DBUtil.beginTans();

                //기존 데이터 삭제
                DBUtil.deleteFromAdditionTable(this.pcode);

                //모든 행을 반복
                for (int i = 0; i < tbl.Rows.Count; i++)
                {
                    ArrayList data = new ArrayList();
                    data.Add(this.pcode);
                    data.Add((string)tbl.Rows[i][12]);
                    data.Add((string)tbl.Rows[i][0]);
                    data.Add((string)tbl.Rows[i][1]);
                    data.Add((string)tbl.Rows[i][2]);
                    data.Add((string)tbl.Rows[i][3]);
                    data.Add((string)tbl.Rows[i][4]);
                    data.Add((string)tbl.Rows[i][5]);
                    data.Add((string)tbl.Rows[i][6]);
                    data.Add((int)tbl.Rows[i][7]);
                    data.Add((int)tbl.Rows[i][8]);
                    data.Add((double)tbl.Rows[i][9]);
                    data.Add((double)tbl.Rows[i][10]);
                    data.Add((double)tbl.Rows[i][11]);
                    data.Add(DateTime.Now);
                    data.Add((int)tbl.Rows[i][14]);

                    DBUtil.insertAdditionInfo(data);
                }

                DBUtil.commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DBUtil.rollBack();
                return;
            }

            MessageBox.Show("저장하였습니다.    ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnApply_Click(object sender, EventArgs e)
        {
            string total_point = lblTotalPoint.Text;
            if (total_point.Equals("-"))
            {
                MessageBox.Show("계산을 하신 후에 반영하세요!    ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else
            {
                formParent.txtAdditionPoint.Text = total_point;
            }
            this.Close();
        }

        private void lnkInput_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            FormAdditionSub f = new FormAdditionSub(this, this.tbl);
            f.ShowDialog();
        }

        private void lnkDel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {

                DataGridViewSelectedRowCollection dgvSelectedRows = dgvAdditionList.SelectedRows;

                if (dgvSelectedRows.Count == 0)
                {
                    MessageBox.Show("삭제할 가산점 항목을 선택하세요!  ", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                //데이터그리드에서만 삭제
                dgvAdditionList.Rows.Remove(dgvSelectedRows[0]);

                /*
                string itemCode = (string)dgvSelectedRows[0].Cells[0].Value;

                if (DBUtil.deleteAddItem(itemCode))
                {
                    dgvAdditionList.Rows.Remove(dgvSelectedRows[0]);
                }
                */

                MessageBox.Show("저장을 클릭해야 삭제한 항목이 실제로 반영됩니다.", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


        }

        private void lnkUP_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (selectedIndex == 0)
            {
                MessageBox.Show("최상위 행입니다.", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }


            if (selectedIndex == -1)
            {
                MessageBox.Show("순위를 변경할 행을 선택하세요!", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //이전 행의 정보
            int prevInx = (int)dgvAdditionList.Rows[selectedIndex - 1].Cells[13].Value;
            int prevOrder = (int)dgvAdditionList.Rows[selectedIndex - 1].Cells[14].Value;

            //현재 행의 정보
            int curInx = (int)dgvAdditionList.Rows[selectedIndex].Cells[13].Value;
            int curOrder = (int)dgvAdditionList.Rows[selectedIndex].Cells[14].Value;

            try
            {
                DBUtil.beginTans();
                DBUtil.additionChangeOrder(prevInx, curOrder);
                DBUtil.additionChangeOrder(curInx, prevOrder);
                DBUtil.commit();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DBUtil.rollBack();
            }

            //데이터그리드 갱신
            this.initGrid();

            //위쪽 행을 선택된 상태로 변경
            dgvAdditionList.Rows[selectedIndex - 1].Selected = true;

            //slectedIndex 갱신
            this.selectedIndex = selectedIndex - 1;
        }

        private void lnkDOWN_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (selectedIndex == -1)
            {
                MessageBox.Show("순위를 변경할 행을 선택하세요!", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (selectedIndex == tbl.Rows.Count - 1)
            {
                MessageBox.Show("마지막 행입니다.", "확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //다음 행의 정보
            int nextInx = (int)dgvAdditionList.Rows[selectedIndex + 1].Cells[13].Value;
            int nextOrder = (int)dgvAdditionList.Rows[selectedIndex + 1].Cells[14].Value;

            //현재 행의 정보
            int curInx = (int)dgvAdditionList.Rows[selectedIndex].Cells[13].Value;
            int curOrder = (int)dgvAdditionList.Rows[selectedIndex].Cells[14].Value;

            try
            {
                DBUtil.beginTans();
                DBUtil.additionChangeOrder(nextInx, curOrder);
                DBUtil.additionChangeOrder(curInx, nextOrder);
                DBUtil.commit();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DBUtil.rollBack();
            }

            //데이터그리드 갱신
            this.initGrid();

            //아래쪽 행을 선택된 상태로 변경
            dgvAdditionList.Rows[selectedIndex + 1].Selected = true;

            //slectedIndex 갱신
            this.selectedIndex = selectedIndex + 1;
        }

        /// <summary>
        /// 셀을 선택할 때 선택된 셀의 행 번호를 멤버 selectedIndex에 설정
        /// </summary>
        /// <param name="sender">dgvAdditionList</param>
        /// <param name="e">DataGridViewCellEventArgs</param>
        private void dgvAdditionList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            this.selectedIndex = e.RowIndex;
        }

    }
}
